自动化运维工具, 较轻量, 可根据服务器架构, 进行服务的编排和部署.
特性
基于 ssh 服务, 无需在目标机器安装 client 软件, 也不需要有服务端存在
依靠大量的模块实现批量部署
配置文件 /etc/ansible/ansible.cfg
参考文档
- http://docs.ansible.com/ansible/intro_installation.html
- http://www.ansible.com.cn/
- http://docs.ansible.com/modules_by_category.html
- http://www.ansible.cn/docs/
安装
机器分为 管理机
和 被管理机
.
云主机创建的时候, 就要保证管理机可以通过 ssh 免密登录被管理机.
管理机安装 Ansible
1 | sudo yum install ansible -y |
管理机配置被管理机组
vim /etc/ansible/hosts
增加机器组
1 | [consulservers] |
被管理机安装 Ansible 支持
yum install libselinux-python -y
PS: 在开启 selinux 情况下必须安装, 关闭 selinux 情况下无需安装.
使用 Ansible 管理服务器
模块的文档
http://docs.ansible.com/ansible/latest/modules_by_category.html
这里面有支持的全部模块, 可以按分类查找.
可以使用 ansible-doc
查询文档
- -l 列出所有可用的模块信息
- -j 输出所有插件 json 信息
- -s NAME 查看指定模块的参数信息
输出信息含义
- 绿色: 查询, 无异常
- 红色: 操作异常
- 黄色: 对主机作出了改动
- 粉色: 对操作的建议和忠告
常用模块简析
ansible 被管理机组 -k “123456” -m command -a “uptime”
-k :以交互方式输入密码, 进行远程管理
-m #指定模块参数(command 为默认模块, 不写也可以)
command #模块名称
-a #指定利用模块执行的动作参数, -a 后面的是要执行的命令
uptime #批量执行的命令
Ansible 命令
1 | ansible 服务器组 参数.. |
- -a MODULE_ARGS, –args=MODULE_ARGS 模块的参数
- –ask-vault-pass
- -B SECONDS, –background=SECONDS 异步超时时间(default=N/A)
- -C, –check 预演修改, 不实际进行处理
- -D, –diff 修改(小)文件时展示差异, 可以与 –check 一起用
- -e EXTRA_VARS, –extra-vars=EXTRA_VARS
- -f FORKS, –forks=FORKS 并行任务数(default=5)
- -h, –help 输出帮助
- -i INVENTORY, –inventory=INVENTORY
- -l SUBSET, –limit=SUBSET
- –list-hosts 输出服务器组中的服务器列表
- -m MODULE_NAME, –module-name=MODULE_NAME 默认命令执行模块(default=command)
- -M MODULE_PATH, –module-path=MODULE_PATH 模块路径
- -o, –one-line 压缩日志
- –playbook-dir=BASEDIR
- -P POLL_INTERVAL, –poll=POLL_INTERVAL 使用 -B 参数时, 修改轮训时间(default=15)
- –syntax-check 测试配置文件格式
- -t TREE, –tree=TREE 日志文件夹
- –vault-id=VAULT_IDS
- –vault-password-file=VAULT_PASSWORD_FILES 密码文件位置
- -v, –verbose 打印详细日志, 支持 -v -vvv -vvvv
- –version 版本, 配置文件位置, 模块加载位置, ansible 安装路径
权限参数
- -b, –become 执行提权切换账号
- –become-method=BECOME_METHOD 指定提权命令(default=sudo),
ansible-doc -t become -l
查看所有命令. - –become-user=BECOME_USER 指定提权用户(default=root)
- -K, –ask-become-pass 指定提权用户密码
服务器连接参数
-k, –ask-pass 使用密码, 非 ssh 免密交互
–private-key=PRIVATE_KEY_FILE, –key-file=PRIVATE_KEY_FILE 使用指定的 private key, 非 id_rsa
-u REMOTE_USER, –user=REMOTE_USER 指定远程服务器用户名(default=None)
-c CONNECTION, –connection=CONNECTION 使用的链接方式(default=smart)
-T TIMEOUT, –timeout=TIMEOUT 执行时间(default=10)
–ssh-common-args=SSH_COMMON_ARGS 给 sftp/scp/ssh 命令传递额外参数
–sftp-extra-args=SFTP_EXTRA_ARGS
–scp-extra-args=SCP_EXTRA_ARGS
–ssh-extra-args=SSH_EXTRA_ARGS
基础模块解析
command(默认模块)
1 | #批量显示远程主机的网卡信息 |
ping
1 | #返回 pong, 说明可以登录 SSH 连接, 这里 ping 但不是测试网络连通性的,用于验证能否登录 SSH 连接, 在查看是否满足 python 的支持, 属于 system 模块 |
调试模块 debug
1 | #此模块在执行过程中打印语句, 对于调试变量或表达式非常有用, 而不一定会停止播放, 与 "When" 指令一起调试非常有用 |
文件传输 copy
1 | # 1)copy 参数 src |
远程执行命令 shell
1 | # 支持特殊符号, -a 里面可接多个名, 用分号分割. |
远程执行脚本 script
1 | # 将本地脚本中的信息, 在远程主机上执行 |
获取主机信息 setup
1 | # 显示远程主机的所有信息(后面加-v 显示详细信息),提取 IP、或架构信息等, X86 来判断主机架构, 安装合适软件 |
软件包管理 yum
1 | # 批量使用yum安装软件iotop |
系统服务启动关闭 service
1 | #临时停止crond服务, 取消开机自启动(相反:state=started enable=yes) |
文件(夹)操作 file
修改文件或目录属性信息, 用于创建文件或目录, 也可以用 mode、owner、group 定义文件或目录的权限信息
1 | 1) path 参数 |
定时任务模块 cron
只能管理自己创建的定时任务, 本来有的管理不了
* * * * * /bin/sh /server/scripts/test.sh &>/dev/null
- minute # Minute when the job should run ( 0-59, _, _/2, etc )
- hour # Hour when the job should run ( 0-23, _, _/2, etc )
- day # Day of the month the job should run ( 1-31, _, _/2, etc )
- month # Month of the year the job should run ( 1-12, _, _/2, etc )
- weekday # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )
- job # 定义定时任务与要做什么事
- name # 给定时任务加一个备注, 避免创建出多个重复的定时任务(根据定时任务备份判断是否生成一个新的定时任务)
- stat # 若设置为 present, 表示创建定时任务, 若设置为 absent, 表示删除指定定时任务
- disabled # disable=yes 注释掉定时任务(不生效), disable=no 解除注释定时任务(生效)
1 | # 创建定时任务 |
磁盘挂载 mount
- src # 要被挂载的目录或文件
- path # 指定挂载点的路径
- fstype # 指定挂载时的文件系统类型
- opts # 在挂载时, 指定挂载参数信息
- state # state=mounted, 在 fstab 文件中的备份将被激活挂载或适当配置, 如果指定 mounted 的挂载挂载点不存在, 会创建 # state=unmounted, 设备将被卸载不会改变 fstab 文件中的信息 # state=absent 和 state=present, 只处理 fatab, 但不影响目录的挂载
1 | ansible george -m mount -a "state=mounted src=172.16.1.31:/data path=/data fstype=nfs" |